package com.jyw.business.obstacles.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.business.obstacles.domain.ObsOrderFault;
import com.jyw.business.obstacles.domain.ObsOrderInfo;
import com.jyw.business.obstacles.domain.dto.web.*;
import com.jyw.business.obstacles.domain.dto.wechat.WorkOrderQueryDto;
import com.jyw.business.obstacles.domain.dto.wechat.WxWorkOrderQueryPageDto;
import com.jyw.business.obstacles.domain.dto.wechat.WxWorkOrderReviewPageDto;
import com.jyw.business.obstacles.domain.vo.web.*;
import com.jyw.business.obstacles.domain.vo.wechat.WorkOrderQueryVO;
import com.jyw.business.obstacles.domain.vo.wechat.WxWorkOrderQueryPageVO;
import com.jyw.business.obstacles.domain.vo.wechat.WxWorkOrderReviewPageVO;
import com.jyw.common.core.page.BasePage;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 工单故障Service接口
 *
 * @author system
 * @date 2023-08-10
 */
public interface IObsOrderFaultService extends IService<ObsOrderFault> {

    /**
     * 新增工单
     *
     * @param addDto
     */
    ObsOrderInfo add(BaseOrderAddDto addDto);

    /**
     * 根据工单号获取工单异常
     *
     * @param orderNum
     * @return
     */
    ObsOrderFault getFaultByOrder(String orderNum);

    /**
     * 判断工单是否需要审核(系统配置中配置了审核信息)
     *
     * @param orderNum
     * @param orderSource
     * @param faultType
     * @return
     */
    boolean isAudit(String orderNum, Integer orderSource, String faultType);

    /**
     * 服务台分页查询
     *
     * @param pageDto 查询参数
     * @param page    分页对象
     * @return
     */
    List<ServerPageVO> serverPage(ServerPageDto pageDto, BasePage page);

    /**
     * 服务台电话报修分页查询
     * @param pageDto
     * @param page
     * @return
     */
    List<ServerCallPageVO> serverCallPage(ServerCallPageDto pageDto, BasePage page);

    /**
     * 我的工单
     *
     * @param workOrderPageDto
     * @return
     */
    List<WorkOrderPageVO> pageWorkOrder(WorkOrderPageDto workOrderPageDto);

    /**
     * 查询服务台科室报修历史工单
     *
     * @param deptId
     * @return
     */
    List<OrderDeptRepairPageVO> getHistoryByDeptId(Long deptId);

    /**
     * 分页查询由我审核工单
     *
     * @param wxWorkOrderReviewPageDto
     * @return
     */
    List<WxWorkOrderReviewPageVO> pageWxProcessWorkOrder(WxWorkOrderReviewPageDto wxWorkOrderReviewPageDto);

    /**
     * 微信分页查询所有工单
     *
     * @param wxWorkOrderQueryPageDto
     * @return
     */
    List<WxWorkOrderQueryPageVO> pageWxAllWorkOrder(WxWorkOrderQueryPageDto wxWorkOrderQueryPageDto);

    /**
     * 处理过的工单
     *
     * @param workOrderPageDto
     * @return
     */
    List<ProcessedPageVO> pageProcessed(WorkOrderPageDto workOrderPageDto);


    /**
     * 工单审核通过
     *
     * @param orderNums
     */
    void enact(String orderNums);

    /**
     * 工单审核驳回
     *
     * @param dto
     */
    void reject(OrderRejectUpdDto dto);


    /**
     * 全部工单
     *
     * @param dto
     * @return
     */
    List<OrderAllPageVO> pageWholeOrder(OrderAllPageDto dto);

    /**
     * 导出工单
     *
     * @param response
     * @param dto
     */
    void exportProduct(HttpServletResponse response, OrderAllPageDto dto);

    /**
     * 编辑工单
     *
     * @param editDto
     */
    void edit(OrderEditDto editDto);

    /**
     * 来源统计分析
     *
     * @param dto
     * @return
     */
    List<OrderStatisticsVO> statisticsSource(ObsStatisticsBaseQueryDto dto);

    /**
     * 故障分类统计
     *
     * @param dto
     * @return
     */
    List<OrderFaultTypeStatisticsVO> statisticsFaultType(ObsStatisticsBaseQueryDto dto);


    /**
     * 科室报修情况(工单数量)
     *
     * @param dto
     * @return
     */
    List<OrderStatisticsVO> statisticsDeptRepair(ObsStatisticsBaseQueryDto dto);

    /**
     * 工程师排名(工单数量)
     *
     * @param dto
     * @return
     */
    List<OrderStatisticsVO> statisticsEngineer(ObsStatisticsBaseQueryDto dto);

    /**
     * 常见故障统计
     *
     * @param dto
     * @return
     */
    List<CommonFaultsCountVO> statisticsCommonFault(ObsStatisticsBaseQueryDto dto);

    /**
     * 服务台统计
     *
     * @param dto
     * @return
     */
    List<ServiceDeskStatisticsVO> statisticsWork(ObsStatisticsBaseQueryDto dto);

    /**
     * 导出来源
     *
     * @param response
     * @param dto
     */
    void exportSource(HttpServletResponse response, ObsStatisticsBaseQueryDto dto);

    /**
     * 导出故障分类
     *
     * @param response
     * @param dto
     */
    void exportFaultType(HttpServletResponse response, ObsStatisticsBaseQueryDto dto);

    /**
     * 导出科室报修情况(工单数量)
     *
     * @param response
     * @param dto
     */
    void exportDeptRepair(HttpServletResponse response, ObsStatisticsBaseQueryDto dto);

    /**
     * 导出工程师排名(工单数量)
     *
     * @param response
     * @param dto
     */
    void exportEngineer(HttpServletResponse response, ObsStatisticsBaseQueryDto dto);

    /**
     * 服务台统计计数
     *
     * @param totalDto
     * @return
     */
    ServerCountVO serverCount(ServerTotalDto totalDto);

    /**
     * 打印工单实体
     *
     * @param id
     * @return
     */
    OrderPrintVO getPrintOrderInfo(Long id);
    /**
     * 工单派单
     * @param dto
     */
    void allocate(AllocateDto dto);


    /*************************小程序******************************************/

    /**
     * 小程序我的工单列表
     *
     * @param dto
     * @return
     */
    List<WorkOrderQueryVO> listWeChatOrder(WorkOrderQueryDto dto);

    /**
     * 相关工单
     * @param phone
     * @return
     */
    List<LinkOrderVO> linkOrder(String phone);

    /**
     * 获取处理耗时
     * @param orderNum
     * @return
     */
    Long getMakeTimeSec(String orderNum);
}
